﻿using GeneticAlgorithms.Genomes;

namespace GeneticAlgorithms.Operators.Initialization
{
    /// <summary>
    /// Base interface for all genome initializers.
    /// </summary>
    /// <typeparam name="TGene">The type of the gene.</typeparam>
    public interface IGeneticInitializer<TGene>
    {
        /// <summary>
        /// Initializes the specified genome.
        /// </summary>
        /// <param name="genome">The genome.</param>
        void Initialize(IGenome<TGene> genome);

        /// <summary>
        /// Initializes a single gene, at a given position.
        /// </summary>
        /// <param name="genome">The genome.</param>
        /// <param name="genePosition">The gene position.</param>
        void InitializeGene(IGenome<TGene> genome, int genePosition);
    }
}
